from ducktape.cluster.cluster_spec import ClusterSpec
from ducktape.cluster.node_container import NodeContainer
from ducktape.cluster.remoteaccount import RemoteAccount

class ClusterNode:
    account: RemoteAccount

    def __init__(self, account, **kwargs) -> None: ...
    @property
    def name(self) -> str: ...
    @property
    def operating_system(self) -> str: ...

class Cluster:
    max_used_nodes: int
    nodes: list[ClusterNode]
    _available_nodes = NodeContainer()

    def __init__(self) -> None: ...
    def __len__(self) -> int: ...
    def alloc(self, cluster_spec: ClusterSpec) -> list[ClusterNode]: ...
    def do_alloc(self, cluster_spec) -> list[ClusterNode]: ...
    def free(self, nodes) -> None: ...
    def free_single(self, node: ClusterNode) -> None: ...
    def __eq__(self, other): ...
    def __hash__(self): ...
    def num_available_nodes(self): ...
    def available(self) -> ClusterSpec: ...
    def used(self) -> ClusterSpec: ...
    def max_used(self) -> int: ...
    def all(self) -> ClusterSpec: ...
